package pro.cherish.knowledgeutil.date;

import cn.hutool.core.date.DateUtil;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author 创建人：cherish
 * @version 版本号：V1.0
 * <p>
 * ***************************修订记录************************************
 * 2019-11-01 cherish 创建该类功能。
 * **********************************************************************
 * </p>
 * @ClassName 类名：DateUtilExt
 * @Description 功能说明：日期时间获取
 * <p>
 * TODO
 * </p>
 * **********************************************************************
 * @date 创建日期： 2019-11-01 cherish
 */
public class DateUtilExt extends DateUtil {

    private static final String YEAR_PATTERN = "yyyy";
    private static final String MONTH_PATTERN = "MM";
    private static final String DAY_PATTERN = "dd";


    private static final String YEAR_MONGTH_PATTERN = "yyyyMM";

    private static final String YEAR_MONTH_DATE_PATTERN = "yyyyMMdd";

    private static final String DATE_TIME_PARTTERN = "yyyyMMddHHmmssSSS";

    /**
     * 获取当前月份
     *
     * @return
     */
    public static String getCurMonth() {
        SimpleDateFormat format = new SimpleDateFormat(DateUtilExt.YEAR_MONGTH_PATTERN);
        return format.format(new Date());
    }

    /**
     * 获取当前日期
     *
     * @return
     */
    public static String getCurDate() {
        SimpleDateFormat format = new SimpleDateFormat(DateUtilExt.YEAR_MONTH_DATE_PATTERN);
        return format.format(new Date());
    }

    /**
     * 获取当前时间
     *
     * @return
     */
    public static String getNowDateTime() {
        SimpleDateFormat formatter = new SimpleDateFormat(DateUtilExt.DATE_TIME_PARTTERN);
        return formatter.format(new Date());
    }

    /**
     * 获取年份
     *
     * @return
     */
    public static String getNowYear() {
        return formatDate(new Date(), DateUtilExt.YEAR_PATTERN);
    }

    /**
     * 获取月份
     *
     * @return
     */
    public static String getNowMonth() {
        return formatDate(new Date(), DateUtilExt.MONTH_PATTERN);
    }

    /**
     * 获取当前日期（日）
     *
     * @return
     */
    public static String getNowDay() {
        return formatDate(new Date(), DateUtilExt.DAY_PATTERN);
    }

    /**
     * 格式化日期
     *
     * @param date    日期
     * @param pattern 格式化规则
     * @return
     */
    public static String formatDate(Date date, String pattern) {
        if (date != null && pattern != null) {
            SimpleDateFormat df = new SimpleDateFormat(pattern);
            return df.format(date);
        } else {
            return "";
        }
    }

    /**
     * 日期推算
     *
     * @param dateStr 日期字符串，格式必须yyyyMMdd
     * @param amount  0 为当天，1 为明天，-1为昨天 以此类推
     * @return
     * @throws ParseException
     */
    public static Date addDays(String dateStr, final int amount) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DateUtilExt.YEAR_MONTH_DATE_PATTERN);
        Date sDate = sdf.parse(dateStr);
        Calendar c = Calendar.getInstance();
        c.setTime(sDate);
        c.add(Calendar.DAY_OF_MONTH, amount);
        Date endDate = c.getTime();
        return endDate;
    }
}
